home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgramD2.iso / T U R B O Language / Turbo Pascal V7.0 / INTRFACE.ZIP / VIEWS.INT < prev   
Text File  |  1992-10-30  |  15KB  |  584 lines

  1.  
  2. {*******************************************************}
  3. {                                                       }
  4. {       Turbo Pascal Version 7.0                        }
  5. {       Turbo Vision Unit                               }
  6. {                                                       }
  7. {       Copyright (c) 1991,92 Borland International     }
  8. {                                                       }
  9. {*******************************************************}
  10.  
  11. unit Views;
  12.  
  13. {$O+,F+,X+,I-,S-}
  14.  
  15. interface
  16.  
  17. uses Objects, Drivers, Memory;
  18.  
  19. const
  20.  
  21. { TView State masks }
  22.  
  23.   sfVisible     = $0001;
  24.   sfCursorVis   = $0002;
  25.   sfCursorIns   = $0004;
  26.   sfShadow      = $0008;
  27.   sfActive      = $0010;
  28.   sfSelected    = $0020;
  29.   sfFocused     = $0040;
  30.   sfDragging    = $0080;
  31.   sfDisabled    = $0100;
  32.   sfModal       = $0200;
  33.   sfDefault     = $0400;
  34.   sfExposed     = $0800;
  35.  
  36. { TView Option masks }
  37.  
  38.   ofSelectable  = $0001;
  39.   ofTopSelect   = $0002;
  40.   ofFirstClick  = $0004;
  41.   ofFramed      = $0008;
  42.   ofPreProcess  = $0010;
  43.   ofPostProcess = $0020;
  44.   ofBuffered    = $0040;
  45.   ofTileable    = $0080;
  46.   ofCenterX     = $0100;
  47.   ofCenterY     = $0200;
  48.   ofCentered    = $0300;
  49.   ofValidate    = $0400;
  50.   ofVersion     = $3000;
  51.   ofVersion10   = $0000;
  52.   ofVersion20   = $1000;
  53.  
  54. { TView GrowMode masks }
  55.  
  56.   gfGrowLoX = $01;
  57.   gfGrowLoY = $02;
  58.   gfGrowHiX = $04;
  59.   gfGrowHiY = $08;
  60.   gfGrowAll = $0F;
  61.   gfGrowRel = $10;
  62.  
  63. { TView DragMode masks }
  64.  
  65.   dmDragMove = $01;
  66.   dmDragGrow = $02;
  67.   dmLimitLoX = $10;
  68.   dmLimitLoY = $20;
  69.   dmLimitHiX = $40;
  70.   dmLimitHiY = $80;
  71.   dmLimitAll = $F0;
  72.  
  73. { TView Help context codes }
  74.  
  75.   hcNoContext = 0;
  76.   hcDragging  = 1;
  77.  
  78. { TScrollBar part codes }
  79.  
  80.   sbLeftArrow  = 0;
  81.   sbRightArrow = 1;
  82.   sbPageLeft   = 2;
  83.   sbPageRight  = 3;
  84.   sbUpArrow    = 4;
  85.   sbDownArrow  = 5;
  86.   sbPageUp     = 6;
  87.   sbPageDown   = 7;
  88.   sbIndicator  = 8;
  89.  
  90. { TScrollBar options for TWindow.StandardScrollBar }
  91.  
  92.   sbHorizontal     = $0000;
  93.   sbVertical       = $0001;
  94.   sbHandleKeyboard = $0002;
  95.  
  96. { TWindow Flags masks }
  97.  
  98.   wfMove  = $01;
  99.   wfGrow  = $02;
  100.   wfClose = $04;
  101.   wfZoom  = $08;
  102.  
  103. { TWindow number constants }
  104.  
  105.   wnNoNumber = 0;
  106.  
  107. { TWindow palette entries }
  108.  
  109.   wpBlueWindow = 0;
  110.   wpCyanWindow = 1;
  111.   wpGrayWindow = 2;
  112.  
  113. { Standard command codes }
  114.  
  115.   cmValid   = 0;
  116.   cmQuit    = 1;
  117.   cmError   = 2;
  118.   cmMenu    = 3;
  119.   cmClose   = 4;
  120.   cmZoom    = 5;
  121.   cmResize  = 6;
  122.   cmNext    = 7;
  123.   cmPrev    = 8;
  124.   cmHelp    = 9;
  125.  
  126. { Application command codes }
  127.  
  128.   cmCut     = 20;
  129.   cmCopy    = 21;
  130.   cmPaste   = 22;
  131.   cmUndo    = 23;
  132.   cmClear   = 24;
  133.   cmTile    = 25;
  134.   cmCascade = 26;
  135.  
  136. { TDialog standard commands }
  137.  
  138.   cmOK      = 10;
  139.   cmCancel  = 11;
  140.   cmYes     = 12;
  141.   cmNo      = 13;
  142.   cmDefault = 14;
  143.  
  144. { Standard messages }
  145.  
  146.   cmReceivedFocus     = 50;
  147.   cmReleasedFocus     = 51;
  148.   cmCommandSetChanged = 52;
  149.  
  150. { TScrollBar messages }
  151.  
  152.   cmScrollBarChanged  = 53;
  153.   cmScrollBarClicked  = 54;
  154.  
  155. { TWindow select messages }
  156.  
  157.   cmSelectWindowNum   = 55;
  158.  
  159. { TListViewer messages }
  160.  
  161.   cmListItemSelected  = 56;
  162.  
  163. { Color palettes }
  164.  
  165.   CFrame      = #1#1#2#2#3;
  166.   CScrollBar  = #4#5#5;
  167.   CScroller   = #6#7;
  168.   CListViewer = #26#26#27#28#29;
  169.  
  170.   CBlueWindow = #8#9#10#11#12#13#14#15;
  171.   CCyanWindow = #16#17#18#19#20#21#22#23;
  172.   CGrayWindow = #24#25#26#27#28#29#30#31;
  173.  
  174. { TDrawBuffer maximum view width }
  175.  
  176.   MaxViewWidth = 132;
  177.  
  178. type
  179.  
  180. { Command sets }
  181.  
  182.   PCommandSet = ^TCommandSet;
  183.   TCommandSet = set of Byte;
  184.  
  185. { Color palette type }
  186.  
  187.   PPalette = ^TPalette;
  188.   TPalette = String;
  189.  
  190. { TDrawBuffer, buffer used by draw methods }
  191.  
  192.   TDrawBuffer = array[0..MaxViewWidth - 1] of Word;
  193.  
  194. { TView object Pointer }
  195.  
  196.   PView = ^TView;
  197.  
  198. { TGroup object Pointer }
  199.  
  200.   PGroup = ^TGroup;
  201.  
  202. { TView object }
  203.  
  204.   TView = object(TObject)
  205.     Owner: PGroup;
  206.     Next: PView;
  207.     Origin: TPoint;
  208.     Size: TPoint;
  209.     Cursor: TPoint;
  210.     GrowMode: Byte;
  211.     DragMode: Byte;
  212.     HelpCtx: Word;
  213.     State: Word;
  214.     Options: Word;
  215.     EventMask: Word;
  216.     constructor Init(var Bounds: TRect);
  217.     constructor Load(var S: TStream);
  218.     destructor Done; virtual;
  219.     procedure Awaken; virtual;
  220.     procedure BlockCursor;
  221.     procedure CalcBounds(var Bounds: TRect; Delta: TPoint); virtual;
  222.     procedure ChangeBounds(var Bounds: TRect); virtual;
  223.     procedure ClearEvent(var Event: TEvent);
  224.     function CommandEnabled(Command: Word): Boolean;
  225.     function DataSize: Word; virtual;
  226.     procedure DisableCommands(Commands: TCommandSet);
  227.     procedure DragView(Event: TEvent; Mode: Byte;
  228.       var Limits: TRect; MinSize, MaxSize: TPoint);
  229.     procedure Draw; virtual;
  230.     procedure DrawView;
  231.     procedure EnableCommands(Commands: TCommandSet);
  232.     procedure EndModal(Command: Word); virtual;
  233.     function EventAvail: Boolean;
  234.     function Execute: Word; virtual;
  235.     function Exposed: Boolean;
  236.     function Focus: Boolean;
  237.     procedure GetBounds(var Bounds: TRect);
  238.     procedure GetClipRect(var Clip: TRect);
  239.     function GetColor(Color: Word): Word;
  240.     procedure GetCommands(var Commands: TCommandSet);
  241.     procedure GetData(var Rec); virtual;
  242.     procedure GetEvent(var Event: TEvent); virtual;
  243.     procedure GetExtent(var Extent: TRect);
  244.     function GetHelpCtx: Word; virtual;
  245.     function GetPalette: PPalette; virtual;
  246.     procedure GetPeerViewPtr(var S: TStream; var P);
  247.     function GetState(AState: Word): Boolean;
  248.     procedure GrowTo(X, Y: Integer);
  249.     procedure HandleEvent(var Event: TEvent); virtual;
  250.     procedure Hide;
  251.     procedure HideCursor;
  252.     procedure KeyEvent(var Event: TEvent);
  253.     procedure Locate(var Bounds: TRect);
  254.     procedure MakeFirst;
  255.     procedure MakeGlobal(Source: TPoint; var Dest: TPoint);
  256.     procedure MakeLocal(Source: TPoint; var Dest: TPoint);
  257.     function MouseEvent(var Event: TEvent; Mask: Word): Boolean;
  258.     function MouseInView(Mouse: TPoint): Boolean;
  259.     procedure MoveTo(X, Y: Integer);
  260.     function NextView: PView;
  261.     procedure NormalCursor;
  262.     function Prev: PView;
  263.     function PrevView: PView;
  264.     procedure PutEvent(var Event: TEvent); virtual;
  265.     procedure PutInFrontOf(Target: PView);
  266.     procedure PutPeerViewPtr(var S: TStream; P: PView);
  267.     procedure Select;
  268.     procedure SetBounds(var Bounds: TRect);
  269.     procedure SetCommands(Commands: TCommandSet);
  270.     procedure SetCmdState(Commands: TCommandSet; Enable: Boolean);
  271.     procedure SetCursor(X, Y: Integer);
  272.     procedure SetData(var Rec); virtual;
  273.     procedure SetState(AState: Word; Enable: Boolean); virtual;
  274.     procedure Show;
  275.     procedure ShowCursor;
  276.     procedure SizeLimits(var Min, Max: TPoint); virtual;
  277.     procedure Store(var S: TStream);
  278.     function TopView: PView;
  279.     function Valid(Command: Word): Boolean; virtual;
  280.     procedure WriteBuf(X, Y, W, H: Integer; var Buf);
  281.     procedure WriteChar(X, Y: Integer; C: Char; Color: Byte;
  282.       Count: Integer);
  283.     procedure WriteLine(X, Y, W, H: Integer; var Buf);
  284.     procedure WriteStr(X, Y: Integer; Str: String; Color: Byte);
  285.   end;
  286.  
  287. { TFrame types }
  288.  
  289.   TTitleStr = string[80];
  290.  
  291. { TFrame object }
  292.  
  293.   { Palette layout }
  294.   { 1 = Passive frame }
  295.   { 2 = Passive title }
  296.   { 3 = Active frame }
  297.   { 4 = Active title }
  298.   { 5 = Icons }
  299.  
  300.   PFrame = ^TFrame;
  301.   TFrame = object(TView)
  302.     constructor Init(var Bounds: TRect);
  303.     procedure Draw; virtual;
  304.     function GetPalette: PPalette; virtual;
  305.     procedure HandleEvent(var Event: TEvent); virtual;
  306.     procedure SetState(AState: Word; Enable: Boolean); virtual;
  307.   end;
  308.  
  309. { ScrollBar characters }
  310.  
  311.   TScrollChars = array[0..4] of Char;
  312.  
  313. { TScrollBar object }
  314.  
  315.   { Palette layout }
  316.   { 1 = Page areas }
  317.   { 2 = Arrows }
  318.   { 3 = Indicator }
  319.  
  320.   PScrollBar = ^TScrollBar;
  321.   TScrollBar = object(TView)
  322.     Value: Integer;
  323.     Min: Integer;
  324.     Max: Integer;
  325.     PgStep: Integer;
  326.     ArStep: Integer;
  327.     constructor Init(var Bounds: TRect);
  328.     constructor Load(var S: TStream);
  329.     procedure Draw; virtual;
  330.     function GetPalette: PPalette; virtual;
  331.     procedure HandleEvent(var Event: TEvent); virtual;
  332.     procedure ScrollDraw; virtual;
  333.     function ScrollStep(Part: Integer): Integer; virtual;
  334.     procedure SetParams(AValue, AMin, AMax, APgStep, AArStep: Integer);
  335.     procedure SetRange(AMin, AMax: Integer);
  336.     procedure SetStep(APgStep, AArStep: Integer);
  337.     procedure SetValue(AValue: Integer);
  338.     procedure Store(var S: TStream);
  339.   end;
  340.  
  341. { TScroller object }
  342.  
  343.   { Palette layout }
  344.   { 1 = Normal text }
  345.   { 2 = Selected text }
  346.  
  347.   PScroller = ^TScroller;
  348.   TScroller = object(TView)
  349.     HScrollBar: PScrollBar;
  350.     VScrollBar: PScrollBar;
  351.     Delta: TPoint;
  352.     Limit: TPoint;
  353.     constructor Init(var Bounds: TRect; AHScrollBar, AVScrollBar: PScrollBar);
  354.     constructor Load(var S: TStream);
  355.     procedure ChangeBounds(var Bounds: TRect); virtual;
  356.     function GetPalette: PPalette; virtual;
  357.     procedure HandleEvent(var Event: TEvent); virtual;
  358.     procedure ScrollDraw; virtual;
  359.     procedure ScrollTo(X, Y: Integer);
  360.     procedure SetLimit(X, Y: Integer);
  361.     procedure SetState(AState: Word; Enable: Boolean); virtual;
  362.     procedure Store(var S: TStream);
  363.   end;
  364.  
  365. { TListViewer }
  366.  
  367.   { Palette layout }
  368.   { 1 = Active }
  369.   { 2 = Inactive }
  370.   { 3 = Focused }
  371.   { 4 = Selected }
  372.   { 5 = Divider }
  373.  
  374.   PListViewer = ^TListViewer;
  375.  
  376.   TListViewer = object(TView)
  377.     HScrollBar: PScrollBar;
  378.     VScrollBar: PScrollBar;
  379.     NumCols: Integer;
  380.     TopItem: Integer;
  381.     Focused: Integer;
  382.     Range: Integer;
  383.     constructor Init(var Bounds: TRect; ANumCols: Word;
  384.       AHScrollBar, AVScrollBar: PScrollBar);
  385.     constructor Load(var S: TStream);
  386.     procedure ChangeBounds(var Bounds: TRect); virtual;
  387.     procedure Draw; virtual;
  388.     procedure FocusItem(Item: Integer); virtual;
  389.     function GetPalette: PPalette; virtual;
  390.     function GetText(Item: Integer; MaxLen: Integer): String; virtual;
  391.     function IsSelected(Item: Integer): Boolean; virtual;
  392.     procedure HandleEvent(var Event: TEvent); virtual;
  393.     procedure SelectItem(Item: Integer); virtual;
  394.     procedure SetRange(ARange: Integer);
  395.     procedure SetState(AState: Word; Enable: Boolean); virtual;
  396.     procedure Store(var S: TStream);
  397.   end;
  398.  
  399. { Video buffer }
  400.  
  401.   PVideoBuf = ^TVideoBuf;
  402.   TVideoBuf = array[0..3999] of Word;
  403.  
  404. { Selection modes }
  405.  
  406.   SelectMode = (NormalSelect, EnterSelect, LeaveSelect);
  407.  
  408. { TGroup object }
  409.  
  410.   TGroup = object(TView)
  411.     Last: PView;
  412.     Current: PView;
  413.     Phase: (phFocused, phPreProcess, phPostProcess);
  414.     Buffer: PVideoBuf;
  415.     constructor Init(var Bounds: TRect);
  416.     constructor Load(var S: TStream);
  417.     destructor Done; virtual;
  418.     procedure Awaken; virtual;
  419.     procedure ChangeBounds(var Bounds: TRect); virtual;
  420.     function DataSize: Word; virtual;
  421.     procedure Delete(P: PView);
  422.     procedure Draw; virtual;
  423.     procedure EndModal(Command: Word); virtual;
  424.     procedure EventError(var Event: TEvent); virtual;
  425.     function ExecView(P: PView): Word;
  426.     function Execute: Word; virtual;
  427.     function First: PView;
  428.     function FirstThat(P: Pointer): PView;
  429.     function FocusNext(Forwards: Boolean): Boolean;
  430.     procedure ForEach(P: Pointer);
  431.     procedure GetData(var Rec); virtual;
  432.     function GetHelpCtx: Word; virtual;
  433.     procedure GetSubViewPtr(var S: TStream; var P);
  434.     procedure HandleEvent(var Event: TEvent); virtual;
  435.     procedure Insert(P: PView);
  436.     procedure InsertBefore(P, Target: PView);
  437.     procedure Lock;
  438.     procedure PutSubViewPtr(var S: TStream; P: PView);
  439.     procedure Redraw;
  440.     procedure SelectNext(Forwards: Boolean);
  441.     procedure SetData(var Rec); virtual;
  442.     procedure SetState(AState: Word; Enable: Boolean); virtual;
  443.     procedure Store(var S: TStream);
  444.     procedure Unlock;
  445.     function Valid(Command: Word): Boolean; virtual;
  446.   end;
  447.  
  448. { TWindow object }
  449.  
  450.   { Palette layout }
  451.   { 1 = Frame passive }
  452.   { 2 = Frame active }
  453.   { 3 = Frame icon }
  454.   { 4 = ScrollBar page area }
  455.   { 5 = ScrollBar controls }
  456.   { 6 = Scroller normal text }
  457.   { 7 = Scroller selected text }
  458.   { 8 = Reserved }
  459.  
  460.   PWindow = ^TWindow;
  461.   TWindow = object(TGroup)
  462.     Flags: Byte;
  463.     ZoomRect: TRect;
  464.     Number: Integer;
  465.     Palette: Integer;
  466.     Frame: PFrame;
  467.     Title: PString;
  468.     constructor Init(var Bounds: TRect; ATitle: TTitleStr; ANumber: Integer);
  469.     constructor Load(var S: TStream);
  470.     destructor Done; virtual;
  471.     procedure Close; virtual;
  472.     function GetPalette: PPalette; virtual;
  473.     function GetTitle(MaxSize: Integer): TTitleStr; virtual;
  474.     procedure HandleEvent(var Event: TEvent); virtual;
  475.     procedure InitFrame; virtual;
  476.     procedure SetState(AState: Word; Enable: Boolean); virtual;
  477.     procedure SizeLimits(var Min, Max: TPoint); virtual;
  478.     function StandardScrollBar(AOptions: Word): PScrollBar;
  479.     procedure Store(var S: TStream);
  480.     procedure Zoom; virtual;
  481.   end;
  482.  
  483. { Message dispatch function }
  484.  
  485. function Message(Receiver: PView; What, Command: Word;
  486.   InfoPtr: Pointer): Pointer;
  487.  
  488. { Views registration procedure }
  489.  
  490. procedure RegisterViews;
  491.  
  492. const
  493.  
  494. { Event masks }
  495.  
  496.   PositionalEvents: Word = evMouse;
  497.   FocusedEvents: Word = evKeyboard + evCommand;
  498.  
  499. { Minimum window size }
  500.  
  501.   MinWinSize: TPoint = (X: 16; Y: 6);
  502.  
  503. { Shadow definitions }
  504.  
  505.   ShadowSize: TPoint = (X: 2; Y: 1);
  506.   ShadowAttr: Byte = $08;
  507.  
  508. { Markers control }
  509.  
  510.   ShowMarkers: Boolean = False;
  511.  
  512. { MapColor error return value }
  513.  
  514.   ErrorAttr: Byte = $CF;
  515.  
  516. { Stream Registration Records }
  517.  
  518. const
  519.   RView: TStreamRec = (
  520.      ObjType: 1;
  521.      VmtLink: Ofs(TypeOf(TView)^);
  522.      Load:    @TView.Load;
  523.      Store:   @TView.Store
  524.   );
  525.  
  526. const
  527.   RFrame: TStreamRec = (
  528.      ObjType: 2;
  529.      VmtLink: Ofs(TypeOf(TFrame)^);
  530.      Load:    @TFrame.Load;
  531.      Store:   @TFrame.Store
  532.   );
  533.  
  534. const
  535.   RScrollBar: TStreamRec = (
  536.      ObjType: 3;
  537.      VmtLink: Ofs(TypeOf(TScrollBar)^);
  538.      Load:    @TScrollBar.Load;
  539.      Store:   @TScrollBar.Store
  540.   );
  541.  
  542. const
  543.   RScroller: TStreamRec = (
  544.      ObjType: 4;
  545.      VmtLink: Ofs(TypeOf(TScroller)^);
  546.      Load:    @TScroller.Load;
  547.      Store:   @TScroller.Store
  548.   );
  549.  
  550. const
  551.   RListViewer: TStreamRec = (
  552.      ObjType: 5;
  553.      VmtLink: Ofs(TypeOf(TListViewer)^);
  554.      Load:    @TListViewer.Load;
  555.      Store:   @TLIstViewer.Store
  556.   );
  557.  
  558. const
  559.   RGroup: TStreamRec = (
  560.      ObjType: 6;
  561.      VmtLink: Ofs(TypeOf(TGroup)^);
  562.      Load:    @TGroup.Load;
  563.      Store:   @TGroup.Store
  564.   );
  565.  
  566. const
  567.   RWindow: TStreamRec = (
  568.      ObjType: 7;
  569.      VmtLink: Ofs(TypeOf(TWindow)^);
  570.      Load:    @TWindow.Load;
  571.      Store:   @TWindow.Store
  572.   );
  573.  
  574. { Characters used for drawing selected and default items in  }
  575. { monochrome color sets                                      }
  576.  
  577.   SpecialChars: array[0..5] of Char = (#175, #174, #26, #27, ' ', ' ');
  578.  
  579. { True if the command set has changed since being set to false }
  580.  
  581.   CommandSetChanged: Boolean = False;
  582.  
  583.  
  584.